package com.scm.service;

import java.util.List;

import com.scm.dto.resp.invent.QueryScmInventoryStashProductPageResp;
import com.scm.dto.resp.invent.ScmInventoryStashProductDo;
import com.scm.persist.model.ScmInventoryInDetail;
import com.scm.persist.model.ScmInventoryOutDetail;
import com.scm.persist.model.ScmInventoryStashProduct;

/**
 * 库存-仓库-商品信息Service接口
 * 
 * @author reptilemanager
 * @date 2024-03-17
 */
public interface IScmInventoryStashProductService 
{
    /**
     * 查询库存-仓库-商品信息
     * 
     * @param id 库存-仓库-商品信息主键
     * @return 库存-仓库-商品信息
     */
    public ScmInventoryStashProduct selectScmInventoryStashProductById(Long id);

    /**
     * 查询库存-仓库-商品信息列表
     * 
     * @param scmInventoryStashProduct 库存-仓库-商品信息
     * @return 库存-仓库-商品信息集合
     */
    public QueryScmInventoryStashProductPageResp selectScmInventoryStashProductList(ScmInventoryStashProduct scmInventoryStashProduct, Integer start, Integer size);

    /**
     * 新增库存-仓库-商品信息
     * 
     * @param scmInventoryStashProduct 库存-仓库-商品信息
     * @return 结果
     */
    public int insertScmInventoryStashProduct(ScmInventoryStashProduct scmInventoryStashProduct);

    /**
     * 修改库存-仓库-商品信息
     * 
     * @param scmInventoryStashProduct 库存-仓库-商品信息
     * @return 结果
     */
    public int updateScmInventoryStashProduct(ScmInventoryStashProduct scmInventoryStashProduct);

    /**
     * 批量删除库存-仓库-商品信息
     * 
     * @param ids 需要删除的库存-仓库-商品信息主键集合
     * @return 结果
     */
    public int deleteScmInventoryStashProductByIds(String ids);

    /**
     * 删除库存-仓库-商品信息信息
     * 
     * @param id 库存-仓库-商品信息主键
     * @return 结果
     */
    public int deleteScmInventoryStashProductById(Long id);

    public int  saveStashProduct(Long tenantId,ScmInventoryInDetail scmInventoryInDetail);

    public int  saveStashProductByOut(Long tenantId,ScmInventoryOutDetail scmInventoryOutDetail);

    public ScmInventoryStashProductDo getStashProductById(long id);

    public String  lockStashProductByInsert(List<ScmInventoryOutDetail> list);

    public String  lockStashProductByUpdate(List<ScmInventoryOutDetail> oldList,List<ScmInventoryOutDetail> updatelist);

    public List<ScmInventoryStashProduct>  queryListByProductIds(Long tenantId,List<Long> productIds);


}
